package controleur;

import java.util.ArrayList;
import java.util.List;

import modele.Etat;
import modele.Evenement;
import reveil.Reveil;
import vue.VueConsole;

public class ControleurSwitch implements IControleur {

	private VueConsole vue;
	private final Reveil rev = Reveil.getInstance();
	private final List<Evenement> listEvenement = new ArrayList<>();

	public ControleurSwitch() {
	}

	@Override
	public void traiterEtat() {

		listEvenement.clear();
		switch (rev.getEtat().getNumEtat()) {
		case 1:
			listEvenement.add(Evenement.ARMER_REVEIL);
			break;
		case 2:
			listEvenement.add(Evenement.DESARMER_REVEIL);
			listEvenement.add(Evenement.WHEN_HC_HS);
			break;
		case 3:
			listEvenement.add(Evenement.DESARMER_REVEIL);
			listEvenement.add(Evenement.METTRE_EN_REPIT);
			listEvenement.add(Evenement.APRES_1MN);
			break;
		case 4:
			listEvenement.add(Evenement.APRES_15MN);
			listEvenement.add(Evenement.DESARMER_REVEIL);
			break;
		}

		vue.afficherVue(listEvenement);

	}

	@Override
	public void traiterEvenement(Evenement evenement) {
		Etat etatCourant = rev.getEtat();

		switch (evenement.getNumEvenement()) {
		case 1:
			if (etatCourant == Etat.NON_ARME) {
				rev.setEtat(Etat.EN_ATTENTE_DECLENCHEMENT);
			}
			break;
		case 2:
			if (etatCourant == Etat.EN_ATTENTE_DECLENCHEMENT
					|| etatCourant == Etat.EN_SONNERIE
					|| etatCourant == Etat.EN_REPIT) {
				rev.setEtat(Etat.NON_ARME);
			}
			break;
		case 3:
			if (etatCourant == Etat.EN_SONNERIE) {
				rev.setEtat(Etat.EN_REPIT);
			}
			break;
		case 4:
			if (etatCourant == Etat.EN_REPIT) {
				rev.setEtat(Etat.EN_SONNERIE);
			}
			break;
		case 5:
			if (etatCourant == Etat.EN_SONNERIE) {
				rev.setEtat(Etat.EN_REPIT);
			}
			break;
		}
		this.traiterEtat();
	}

	public VueConsole getVue() {
		return vue;
	}

	public void setVue(VueConsole vue) {
		this.vue = vue;
	}

	public Reveil getRev() {
		return rev;
	}

}
